package com.yuw.udpsocket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class ServerThread extends Thread {

	// 服务器DatagramSocket
	// 注意：服务器DatagramSocket监听的端口要和客户端的端口号一致，否则无法建立来接
	private DatagramSocket ssocket;

	@Override
	public void run() {
		try {
			// 初始化服务器 的 DatagramSocket,需要制定端口号，因为服务器端的DatagramSocket需要在服务器上制定的端口号对客户端的请求进行监听
			ssocket = new DatagramSocket(8890);

			// 服务器端的DatagramSocket创建一个用于接收客户端的DatagramPacket
			// 也就是，服务器端使用DatagramPacket来接收客户端发送的消息内容
			// 创建一个DatagramPacket使用的字节数组
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf, buf.length);
			// 使用死循环监听客户端的请求
			while (true) {

				////////// 接收消息/////////////
				// 将客户端发送的消息接收到服务器端的DatagramPacket中
				ssocket.receive(dp);
				// 获取本次接收的信息的字节的个数
				int len = dp.getLength();

				// 把接收到的字节转换为字符串
				String strMsgRecieved = new String(buf, 0, len);

				System.out.println(strMsgRecieved);

				////////// 发送消息/////////////
				// 需要发送的消息
				String strMsgSend = new String("你好客户端，我是服务器端，我已经接收到你的消息了");
				// 将需要发送的消息打包到DatagramPacket数据包中
				DatagramPacket dpSend = new DatagramPacket(strMsgSend.getBytes(),0,strMsgSend.getBytes().length,
						dp.getSocketAddress());
				// 使用DatagramSocket发送数据包到网络
				ssocket.send(dpSend);
				
				// 输出信息
				System.out.println(strMsgSend);
				
			}
			//
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
